/*
 * NodeList_for_Two_Way_GB2312.h
 *
 * Created by GF on 2023/3/10.
 */

#ifndef NODELIST_FOR_TWO_WAY_GB2312_H
#define NODELIST_FOR_TWO_WAY_GB2312_H

/* NodeList 2W 节点(Node) 结构体 */
struct Node_2W {

    int    Idx;        /* 索引(Index) */
    char   Type[16];   /* 类型(Type) */
    char   StrVal[32]; /* 字符串值(String Value) */
    int    IntVal;     /* 整数值(Integer Value) */
    double DecVal;     /* 小数值(Decimal Value) */
    /* ********************************************** */
    struct Node_2W* Prev; /* Nodelist 2W 的前一节点 */
    struct Node_2W* Next; /* Nodelist 2W 的下一节点 */
};

/* NodeList 2W 节点(Node) 初始化 */
struct Node_2W* NodeList_2W_Node_Init();

/* NodeList 2W 获取长度(Length) */
int NodeList_2W_Get_Length(struct Node_2W* Head);

/* NodeList 2W 重置 索引(Index) */
void NodeList_2W_Reset_Index(struct Node_2W* Head);

/* NodeList 2W 末尾添加 节点(Node) 并赋值 */
void NodeList_2W_Append_Node_and_Assign(struct Node_2W* Head, char* StrVal);

/* NodeList 2W 在指定的索引前面插入 节点(Node) 并赋值 */
void NodeList_2W_Insert_Node_and_Assign(struct Node_2W* Head, int Index, char* StrVal);

/* NodeList 2W 输出为列表 */
void NodeList_2W_Print_as_List(struct Node_2W* Head);

/* NodeList 2W 清空 */
void NodeList_2W_Clear(struct Node_2W* Head);

#endif //NODELIST_FOR_TWO_WAY_GB2312_H
